﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using BusinessObjects;
using AFSharedLibrary;

namespace UIDesigner.SurfaceProperties
{
    public interface IEventStateValue
    {
    }

    public class EventStateValue<EventObjectType, EventType, MemberObjectType, MemberType> : IEventStateValue
    {
        private EventType m_objEvent;
        private MemberType m_objMember;
        private object m_objValue;
        private Expression m_objExpression;
        private PathSource m_objPathSource;
        private EventObjectType m_objEventObject;
        private MemberObjectType m_objMemberObject;

        public EventType Event
        {
            get 
            { 
                return m_objEvent; 
            }
        }

        public MemberType Member
        {
            get 
            { 
                return m_objMember; 
            }
        }

        public object Value
        {
            get 
            { 
                return m_objValue; 
            }
        }

        public Expression Expression
        {
            get 
            { 
                return m_objExpression; 
            }
        }

        public PathSource PathSource
        {
            get 
            { 
                return m_objPathSource; 
            }
        }

        public EventObjectType EventObject
        {
            get 
            { 
                return m_objEventObject; 
            }
        }

        public MemberObjectType MemberObject
        {
            get 
            { 
                return m_objMemberObject; 
            }
        }

        public EventStateValue(EventObjectType objEventObject, MemberObjectType objMemberObject, EventType objEvent, MemberType objMember, object objValue)
        {
            m_objEventObject = objEventObject;
            m_objMemberObject = objMemberObject;
            m_objEvent = objEvent;
            m_objMember = objMember;
            m_objValue = objValue;
        }

        public EventStateValue(EventObjectType objEventObject, EventType objEvent)
        {
            m_objEventObject = objEventObject;
            m_objEvent = objEvent;
        }

        public EventStateValue(Expression objExpression)
        {
            m_objExpression = objExpression;
        }

        public EventStateValue(PathSource objPathSource)
        {
            m_objPathSource = objPathSource;
        }
    }
}
